\chapter{Anforderungsanalyse}\label{chapter:requirment}\input{chapters/requirements_analysis/figuresTables}
Im folgenden Kapitel wird die Anforderungsanalyse des Systems NOP-Engine ausf"uhrlich beschrieben. Damit werden die Anforderungen der NOP-Engine durch ein mit Hilfe der Cockburn-Formatvorlage aufgebautes Anwendungsfallmodell herausgefunden, und in zwei Gruppen, sowie funktionale Anforderungen und spezielle Anforderungen aufgeteilt. Dabei wird noch ein Anwendungsfalldiagramm zur Beschreibung der herausgefundenen Anwendungsf"alle und der funktionalen Anforderungen dargestellt.
\section{Vorkenntnisse zur Anforderungsanalyse}
Vor der Implementierung werden die Aufgaben oder die Funktionalit"aten der NOP-Engine durch bestimmte Verfahren in einem explizierten Format  beschrieben werden. Mit anderen Worten m"ussen diese Aufgaben in Anforderungen umgewandelt werden. In der Softwareentwicklung wird dieser Prozess Anforderungsanalyse genannt.
\subsection{Anforderung}
{\bf Anforderungen} \engl{requirements} sind Funktionen und Bedingungen, die ein System erf"ullen sollte, um Ziele vom Auftraggeber zu erreichen. Dabei handelt es sich auch um Interaktionen zwischen einem System und seinen Benutzern bzw. die Zust"ande des Systems vor und nach den Interaktionen. Wegen der Vielfalt von Anforderungen eines Systems werden sie durch eine Kategorisierung voneinander unterschieden.
\subsection{Kategorien von Anforderungen}
Nach dem so genannten {\bf FURPS+-Modell} \cite{Grady92} werden Anforderungen  kategorisiert. "`FURPS"' ist eine Abk"urzung f"ur die folgenden Attribute,
\begin{itemize}
\item {\bf Funktionalit"at} \engl{functional} - Features, F"ahigkeiten, Sicherkeit.
\item {\bf Anwenderfreundlichkeit} \engl{Usability} - Humanfaktoren, Hilfe, Dokumentation.
\item {\bf Zuverl"assigkeit} \engl{Reliability} - Misserfolgsquote, Wiederanlauff"ahigkeit, Vorhersagbarkeit.
\item {\bf Performance} \engl{Performance} - Reaktionszeiten, Durchsatz, Genauigkeit, Verf"ugbarkeit, Ressourceneinsatz.
\item {\bf Unterst"utzbarkeit} \engl{Supportability} - Anpassungsf"ahigkeit, Wartbarkeit, Internationalisierung, Konfigurierbarkeit.
\end{itemize}
Es ist n"utzlich, die \kc{FURPS} Kategorien als Checkliste f"ur die Behandlung von Anforderungen zu verwenden, um das Risiko zu verringern, eine wichtige Facette des Systems zu "ubersehen. \\\\
In dieser vorliegenden Arbeit konzentrieren wir uns nur auf die Funktionalit"aten bzw. die Performance der NOP-Engine, die zum Aufbauen des Systems notwendig sind.
\subsection{Anforderungsanalyse}
Ob ein System seine Aufgaben erf"ullt, ist abh"angig davon, ob die Anforderungen dieses Systems richtig herausgefunden und spezifiziert wurden. Folglich ist zur Entwicklung eines Systems sehr wichtig, die Anforderungen eines Systems herauszufinden. Dieser Prozess wird als \mbox{{\bf Anforderungsanalyse}} \engl{requirements analysis} bezeichnet. Sie beeinflusst stark die Entwicklung eines Systems. Zum Analysieren der Anforderungen der NOP-Engine werden Anwendungsf"alle und Anwendungsfalldiagramme verwendet, um die Anforderungen herauszufinden bzw. zu modellieren.
\subsection{Anwendungsf"alle}
{\bf Anwendungsf"alle} \engl{use cases} sind schriftlich fixierte Geschichten.  Dabei liegt die Betonung darauf, wie ein Akteur ein System verwendet, um gewisse Ziele zu erreichen. Bei Anwendungsf"allen handelt es sich darum, Anforderungen zu entdecken und festzuhalten. Ein {\bf Anwendungsfall-Modell} ist eine Kollektion von mehreren Anwendungsf"allen. Es spielt eine gro"se Rolle bei der Softwareentwicklung und beeinflusst viele Aspekte der Softwareentwicklung, besonders bei der Anforderungsanalyse. Hierbei werden zwei wichtige Konzepte vorgestellt, damit man Anwendungsf"alle beschreiben kann.
%Ein Anwendungsfall sollte rein von einer nat"urlichen Sprache beschrieben werden.
\subsubsection{Akteur}
Ein {\bf Akteur} \engl{actor} ist eine Komponente mit einem Verhalten, wie beispielweise eine Person, ein System oder eine Organisation. Er wird als der Trigger einer Geschichte betrachtet und f"uhrt eine Reihe von Aktionen zum Steuern des Systems durch, um seine Ziele zu erreichen.
\subsubsection{Szenario}
Ein {\bf Szenario} \engl{scenario} ist eine spezielle Folge von Aktionen und Interaktionen zwischen Akteuren und dem System. Es wird auch als {\bf Anwendungsfall-Instanz} bezeichnet. Ein Szenario beschreibt eine bestimmte Geschichte "uber die Verwendung eines Systems.
\\\\
Ein Anwendungsfall besteht aus mehreren Akteuren und Szenarios, Er beschreibt eine vollst"andige Geschichte zwischen Akteurn und Systemen und repr"asentiert ihre Verhalten. In dem Abschnitt \ref{section:findusecase} wird ein Anwendungsfall-Modell f"ur die NOP-Engine durch die Cockburn-Formatvorlage \cite{cock00} aufgebaut.
\subsection{Anwendungsfalldiagramme}
Ein {\bf Anwendungsfalldiagramm} \engl{use case diagram} ist eine der dreizehn Diagrammarten von UML. Im Vergleich zu {\em Anwendungsf"allen} sind Anwendungsfalldiagramme \kc{Bilder.}Ein Anwendungsfalldiagramm visualisiert die funktionalen Anforderungen eines auf Texten basierenden Anwendungsfall-Modells durch die folgenden Komponenten
\begin{itemize}
	\item{\bf Akteur} \engl{actor}. Ein Akteur wird als ein Strichm"annchen\footnote{Ein {\bf Strichm"annchen} ist ein stilisiertes Bild eines fiktiven oder real existierenden Lebewesens, dessen Gliedma"sen jeweils nur durch einen einzigen Strich dargestellt werden. } bezeichnet.
	\item{\bf Anwendungsfall} \engl{use case}.  In einem Anwendungsfalldiagramm ist ein Anwendungsfall als eine horizontale Ellipse darzustellen.
	\item{\bf Association}  \engl{association}. Assoziationen wird als durchgezogene Linien repr"asentiert und beschreibt das Verhalten zwischen Akteuren und Anwendungs-f"allen.
\end{itemize}
Damit kann man Anwendungsf"alle und Funktionalit"aten eines Systems anschaulich modellieren.%, und die {\em Ubiquitous Language}\footnote{Ubiquitous Language ist eine Konzept aus Domain-Driven Design, das im Buch \cite{Evans04} von Eric Evans vorgestellt ist, um eine einheitliche Sprache f"ur Dom"anen-Experten und Programmierer aufzubauen.} f"ur alle Teilnehmer eines Projekts erweitern.
\section{Anwendungsf"alle der NOP-Engine}\label{section:findusecase}
In dieser Arbeit wird die Formatvorlage\footnote{Diese Vorlage ist unter {\em http://alistair.cockburn.us}  im Web erh"altlich.}, die von Alistair Cockburn entworfen wurde, zur Darstellung der Anwendungsf"allen der NOP-Engine verwendet.
\subsection{Konzepte der  Cockburn-Formatvorlage}
Hierbei werden einige Konzepte f"ur das Verst"andis der Cockburn-Formatvorlage vorgestellt.
\begin{itemize}
\item {\bf Umfang} bedeutet, wozu die Anwendungsf"alle dienen.
\item {\bf Stakeholder} sind die Teilnehmer in diesen Anwendungsf"allen.  
\item {\bf Standardablauf} ist ein Anwendungsfall, und beschreibt das am h"aufigsten vorgekommene Szenario zur Anwendung eines Systems.
\item {\bf Erweiterungen} sammeln die Erweiterungen des Standardablaufs bzw. alle alternativen Abl"aufe eines Systems, die als mehrere Anwendungsf"alle dieses Systems betrachtet werden.
\item {\bf Spezielle Anforderungen} sind die Anforderungen eines Systems au"ser den Funktionalit"aten.
\item {\bf Datenvariationen} sind die Variationen von Daten. Beispielsweise, wie viele Eingabe-Methoden es gibt, ein gewisses NOP-Projekt zu selektieren.
\end{itemize}
\subsection{Anwendungsf"alle der NOP-Engine in dem Cockburn-Format}
\vspace{0.5cm}
%\begin{description}
%	\item[Anwendungsf"alle des NOP-Engine]\item 
\begin{itemize}
\item{\bf Umfang}: Anwendung der NOP-Engine
\item{\bf Ebene}: Anwendungsziel
\item{\bf Akteure}: Verwalter
\item{\bf Stakeholder und Interessen}:\\\\
Verwalter will 
	\begin{itemize}
		\item eine schnelle Eingabe und richtige Ergebnisse, bzw.
		\item immer das aktuelle NOP eines Benutzers haben.
	\end{itemize}
\item {\bf Vorbedingungen}:
	\begin{itemize}
		\item Alle vorgekommenen Sessionen wurden gespeichert.
		\item Verwalter haben die Kenntnisse "uber NOP-Projekte, Strategien und NOPs.
		\item Alle "Anderungen der Variablen der NOP-Engine sowie Aktionen und Zonen wurden historisiert.
	\end{itemize}
\item{\bf Nachbedingungen}: 
	\begin{itemize}
		\item Die neuen NOPs werden richtig berechnet. 
		\item Die Ergebnisse (NOPs) werden gespeichert.
		\item Der Status des eingegebenen NOP-Projekts wird aktualisiert.
		\item Die zus"atzlichen Informationen werden in der aktuellen Benutzer-Session hinzugef"ugt.
		\item Die alten NOPs sollten historisiert und danach irgendwann herausgefunden werden.
	%	\item Die zus"atzlichen Informationen "uber die Sessionen werden aktualisiert.
	\end{itemize}
\item{\bf Standardablauf}: 
	\begin{enumerate}
		\item Verwalter startet die NOP-Engine.
		\item NOP-Engine zeiget das {\em Start-Men"u} an. 
		\item Verwalter w"ahlt ein NOP-Projekt aus, und bestimmt zum Anzeigen eines NOP-Projekts
		\item NOP-Engine geht zum {\em Projekt-Anzeiger}, und zeigt den Inhalt des NOP-Projekts an.
		\item Verwalter berechnet die NOPs f"ur das ausgew"ahlte NOP-Projekt.
		\item NOP-Engine berechnet die NOPs f"ur das ausgew"ahlte NOP-Projekt, speichert sie ab, aktualisiert den Status des NOP-Projekts und zeigt eine Abschluss-Nachricht im {\em Message-Anzeiger} an.
		\item Verwalter bestimmt die Abschluss-Nachricht.
		\item NOP-Engine geht wieder zum {\em Start-Men"u}.
%		\item System gibt sie als Ergebnisse zur"uck.
		
	\end{enumerate}
\item{\bf Erweiterungen}: (oder alternative Abl"aufe) 
	\begin{enumerate}
		\item Verwalter will ein neues NOP-Projekt anlegen.
		\begin{enumerate}
			\item Verwalter erstellt ein neues leeres NOP-Projekt.
		 	\item NOP-Engine geht zum {\em Projekt-Editor}.
		 	\item Verwalter gibt die Informationen f"ur das neue NOP-Projekt ein, und speichert das Projekt ab.
		 	\item NOP-Engine speichert das Projekt
		\end{enumerate}
		\item Verwalter will den Inhalt eines NOPs anschauen.	
			\begin{enumerate}
				\item Verwalter w"ahlt ein NOP aus, und bestimmt zum Anzeigen des NOP's
				\item NOP-Engine geht zum {\em NOP-Anzeiger}, und zeigt den Inhalt des ausgew"ahlten NOPs an.
			\end{enumerate}
		\item Verwalter kann nach dem Selektieren eines NOP-Projekts direkt NOPs berechnen lassen, ohne den Inhalt des NOP-Projekts zu lesen.	
			\begin{enumerate}
				\item Verwalter selektiert ein NOP-Projekt und berechnet die NOPs f"ur das NOP-Projekt.
				\item NOP-Engine berechnet die NOPs f"ur das ausgew"ahlte NOP-Projekt, speichert sie ab, aktualisiert den Status des NOP-Projekts und zeigt eine Abschluss-Nachricht im {\em Message-Anzeiger} an.
				\item Verwalter bestimmt die Abschluss-Nachricht.
				\item NOP-Engine geht wieder zum {\em Start-Menu}.
			\end{enumerate}
		\item Wird das von dem Verwalter ausgew"ahlte Projekt nicht herausgefunden,
			\begin{enumerate}
				\item NOP-Engine geht zum {\em Fehler-Anzeiger}, und zeigt eine Fehlermeldung an,
				\item Verwalter bestimmt die Fehlermeldung.
				\item NOP-Engine aktualisiert den Zustanden des {\em Start-Men"u}. 
			\end{enumerate}
		\item Hat das von dem Verwalter ausgew"ahlte NOP nicht vorhanden,
			\begin{enumerate}
				\item NOP-Engine geht zum {\em Fehler-Anzeiger}, und zeigt eine Fehlermeldung an.
				\item Verwalter bestimmt die Fehlermeldung.
				\item NOP-Engine aktualisiert den Zustanden des {\em Start-Men"u}. 
			\end{enumerate}
		
		\item Ist die Berechnung der NOP's f"ur ein NOP-Projekt nicht geklappt,
			\begin{enumerate}
				\item NOP-Engine geht zum {\em Fehler-Anzeiger}, und zeigt eine Fehlermeldung an.
				\item Verwalter bestimmt die Fehlermeldung.
				\item NOP-Engine herstellt den alten Zustand des NOP-Projekts wieder, und aktualisiert den Zustand des {\em Start-Menu}.
			\end{enumerate}		
	\end{enumerate}
\item{\bf Spezielle Anforderungen}: 
	\begin{itemize}
		\item  NOPs m"ussen  effizient berechnet werden, d.h. eine Auflistung aller Benutzern oder ihrer Benutzer-Sessionen ist zu vermeiden\footnote{Das Argument wird im Kapitel \ref{chapter:algo}, im Abschnitt \ref{section:attention} erl"autet.}. %Wegen der Gro"sen Anzahl von Benutzern bzw. ihreren Benutzer-Sessionen
		\item Bei der Berechnung von NOP's muss auf die Historisierung\footnote{Der Begriff Historisierung wird im Kapitel \ref{chapter:ground}, Abschnitt \ref{section:his} erl"autert.} von Aktionen und Zonen aufgepasst, um die Nebenwirkungen der "Anderungen der Aktionen und Zonen zu Vermeiden.
		\item Nach der Berechnung von neuen NOP's m"ussen die alten NOP's historisiert werden.
		\item Einige Gesch"aftsregeln zur Einstellung von NOP-Projekten sollen frei w"ahlbar \engl{pluggabel} sein.
		\item NOP-Engine sollte mit JAVA als eine Web-Anwendung implementiert.
	\end{itemize}
\item{\bf Liste der Datenvariationen}: 
	\begin{itemize}
		\item Beim Ausw"ahlen eines NOP-Projekts gibt der Verwalter den Namen oder Bezeichner des NOP-Projekts ein, oder er selektiert es aus einer Liste, die alle NOP-Projekte enth"alt. 
	\end{itemize}
\item{\bf H"aufigkeit des Auftretens}: 
	
\begin{itemize}
	\item Periodisch ausgef"uhrt.
\end{itemize}
\item{\bf Offene Fragen}:
\begin{enumerate}
	\item Wie viel Gesch"aftsregeln gibt es zur Einstellung von NOP-Projekten?
	\item Welche davon sollen frei w"ahlbar sein?
\end{enumerate}
\end{itemize}
%\end{description}
Durch diese Beschreibung wird ein Anwendungsfall-Modell mit mehreren Anwendungsf"allen sowie dem Standardablauf und sechs alternativen Abl"aufen f"ur die NOP-Engine aufgebaut. In dem Abschnitt \ref{section:specialrequirements} werden die funktionalen Anforderungen  (Funktionalit"aten) des Systems mit Hilfe dieses Anwendungsfall-Modells  extrahiert, und in einer Liste dargestellt. Die Elemente in den speziellen Anforderungen, der Liste der Datenvariationen und der offenen Fragen verf"ugen "uber eine eigene Liste. Sie werden als spezielle Anforderungen der NOP-Engine bezeichnet.

\subsection{Antwort der offenen Fragen}
Zur Einstellung von NOP-Projekten werden vier wichtigen Gesch"aftsregeln, sowie der Parameter $a$, der Parameter $f$, die Seitenregel und der Schalter f"ur den prominenten Faktor f"ur die Berechnung von NOP's zur Verf"ugung gestellt. Im letzten Kapitel wird vorgestellt, dass der Parameter $f$ durch eine gewisse Funktion ausgewertet werden soll. Diese Funktion muss beim Anlegen eines NOP-Projekts frei w"ahlbar sein. In der aktuellen Version der NOP-Engine stehen zwei Funktionen f"ur die Auswertung des Parameter $f$ zur Verf"ugung. Es besteht die M"oglichkeit, dass noch mehrere solcher Funktionen sp"ater in der NOP-Engine hinzugef"ugt werden. Eine flexible L"osung zum Verwalten bzw. freien Ausw"ahlen solcher Funktionen wird erwartet.

\subsection{Anwendungsfalldiagramm zur graphischen Modellierung des Anwendungsfall-Modells der NOP-Engine}
Zum anschaulichen Einblick des Anwendungsfall-Modells wird ein Anwendungsfalldiagramm dargestellt, damit die obenerw"ahnten Anwendungsf"alle graphisch modelliert, und dazu noch die funktionalen Anforderungen beschrieben werden.
\figuresOfUseCase
%---------------------------------
%---------------------------------
\section{Spezifizieren der Anforderungen}
Alle durch das obenerw"ahnte Anwendungsfall-Modell herausgefundenen Anforderungen lassen sich in zwei Gruppen, funktionale Anforderungen und speziellen Anforderungen spalten, und in den folgenden zwei Liste darstellen.
\subsection{Funktionale Anforderungen der NOP-Engine}\label{section:funreq}
Ausgehend von den Anwendungsf"allen in der Cockburn-Format bzw. dem Anwendungsfalldiagramm werden die Funktionalit"aten der NOP-Engine festgehalten. Jede Interaktion zwischen dem Verwalter und der NOP-Engine wird als eine funktionale Anforderung betrachtet. 
\subsubsection{Liste 1}\label{section:requirementsfirstlist}
\begin{enumerate}
	\item Anzeigen vom {\em Start-Menu}
	\item Anzeigen vom {\em Projekt-Editor}
	\item Anzeigen des Inhalts eines NOP-Projekts im {\em Projekt-Anzeiger}
	\item Anzeigen des Inhalts eines NOPs im {\em NOP-Anzeiger}
	\item Anzeigen einer Fehlermeldung f"ur ein nicht vorhandenes NOP-Projekte im {\em Fehler-Anzeiger}
	\item Anzeigen einer Fehlermeldung f"ur ein nicht vorhandenes NOP im {\em Fehler-Anzeiger}
	\item Anzeigen einer Fehlermeldung f"ur einfehlerhaftes Berechnen von NOPs im {\em Fehler-Anzeiger}
	\item Anzeigen der Abschluss-Nachricht nach dem Berechnen von NOPs im {\em Message-Anzeiger}
	\item Selektieren eines NOP-Projekts
	\item Selektieren eines NOPs
	\item Berechnen von NOPs f"ur ein ausgew"ahlte NOP-Projekt
	\item Abspeichern eines neuen NOP-Projekts.
	\item Abspeichern eines neuen NOPs
	\item Aktualisieren des Status eines NOP-Projekt nach dem Berechnen von NOPs
	\item Wiederherstellen den Zustand eines NOP-Projekts nach einem fehlerhaften Berechnen von NOPs
\end{enumerate}
\subsection{Spezielle Anforderungen der NOP-Engine}\label{section:specialrequirements}
Die Speziellen Anforderungen enthalten alle Elemente, die in den speziellen Anforderungen, der Liste der Datenvariationen und den offenen Fragen stehen.
\subsubsection{Liste 2}\label{section:requirementssecondlist}
\begin{enumerate}
	\item Effizienz des Berechnens von NOPs
	\item Erm"oglichen der flexiblen Einstellung der frei w"ahlbaren Funktionen f"ur den Parameter $f$ von NOP-Projekten.
	\item Erm"oglichen des Ausw"ahlens eines NOP-Projekts durch das Eingeben des Namen oder Bezechners des NOP-Projekts oder eine Liste, die alle vorhandenen NOP-Projekte enth"alt.
	\item Erm"oglichen der Historisierung von Aktionen, Zonen und alten NOP's.
	\item Implementieren der NOP-Engine mit der Programmiersprache JAVA als eine Web-Anwendung.
\end{enumerate}
\section{Zusammenfassung}
In diesem Kapitel wird eine Anforderungsanalyse zum Herausfinden und spezifizieren der Anforderungen der NOP-Engine durchgef"uhrt. Dabei wird ein Anwendungsfall-Modell zur Beschreibung der Anwendungsf"alle des NOP-Engine-Systems mit Hilfe der Cockburn-Formatvorlage erstellt. Hierzu wird noch ein Anwendungsfalldiagramm zur graphischen Modellierung dieser Anwendungsf"alle und anschaulichen Erl"auterung der funktionalen Anforderungen der NOP-Engine zur Verf"ugung gestellt. Schlie"slich lassen sich alle durch diese Anwendungsf"alle herausgefundenen Anforderungen in zwei Gruppen, die funktionalen und speziellen Anforderungen aufteilen. Sie werden in zwei Listen dargestellt bzw. spezifiziert. Die Implementierung der NOP-Engine soll vollst"andig von diesen Anforderungen abh"angen.
